package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import modelo.Cancha;
import modelo.ListadoCancha;
import util.ConexionBD;
import excepcion.DAOExcepcion;

public class CanchaDAO extends BaseDAO{

	public void insertar(Cancha vo) throws DAOExcepcion {
		System.out.println("CanchaDAO: insertar(Cancha vo)");
		String query = "INSERT INTO cancha(caracteristicas, Local_idLocal) VALUES (?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getCaracteristicas());
			stmt.setInt(2, vo.getObjLocal().getCodigo());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public void eliminar(int codigo) throws DAOExcepcion {
		System.out.println("CanchaDAO: eliminar(Int codigo)");
		String query = "DELETE FROM cancha WHERE idCancha=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codigo);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Collection<Cancha> listasimple() throws DAOExcepcion {
		System.out.println("CanchaDAO: listar()");
		Collection<Cancha> c = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select idcancha,caracteristicas from cancha";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancha vo = new Cancha();
				vo.setCodigo((rs.getInt("idcancha")));
				vo.setCaracteristicas((rs.getString("caracteristicas")));
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public Collection<ListadoCancha>  listarPromocioes(String cancha) throws DAOExcepcion {
		System.out.println("CanchaDAO: listarPromocioes()");
		Collection<ListadoCancha> c = new ArrayList<ListadoCancha>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			//String query = "" + //"select c.caracteristicas, l.nombre, l.direccion from local l, cancha c, Cronograma cp, programacion p where l.idlocal=c.local_idlocal and cp.cancha_idcancha=c.idcancha  and programacion_idprogramacion= p.idprogramacion and l.distrito like ? and p.hora=? and p.hora= ?";
			String query = 
				"select l.nombre, c.caracteristicas, p.fecha, p.hora,p.tarifa, p.promociones " +
				"from programacion p  inner join cronograma cr on p.idprogramacion = cr.programacion_idprogramacion inner join cancha c on (cr.cancha_idcancha=c.idcancha)  inner join local l on (c.local_idlocal=l.idlocal) "+
			"where 	" +
			//"l.idlocal=c.local_idlocal and	" +
			//"cp.cancha_idcancha=c.idcancha  and		" +
			//"a.Cronograma_idCronograma = cp.idcronograma and		" +
			"c.idCancha like \"%"+cancha+"%\" "+
			"order by l.nombre, c.caracteristicas, p.fecha, p.hora,p.tarifa, p.promociones ";
			

			System.out.println(query);
			
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				ListadoCancha vo = new ListadoCancha();

				vo.getCancha().setCaracteristicas(rs.getString("caracteristicas"));
				vo.getCronograma().setFecha(rs.getString("fecha"));
				vo.getCronograma().setHora( rs.getString("hora"));
				vo.getCronograma().setTarifa( rs.getDouble("tarifa"));
				vo.getCronograma().setPromociones( rs.getString("promociones"));
				vo.getLocal().setNombre( rs.getString("nombre"));
				c.add(vo);
				
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public Collection<ListadoCancha>  listar(String dis, String dia, String hora) throws DAOExcepcion {
		System.out.println("CanchaDAO: listar()");
		Collection<ListadoCancha> c = new ArrayList<ListadoCancha>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			//String query = "" + //"select c.caracteristicas, l.nombre, l.direccion from local l, cancha c, Cronograma cp, programacion p where l.idlocal=c.local_idlocal and cp.cancha_idcancha=c.idcancha  and programacion_idprogramacion= p.idprogramacion and l.distrito like ? and p.hora=? and p.hora= ?";
			String query = "select l.nombre, l.direccion, l.distrito, c.caracteristicas,  p.fecha, p.hora, p.tarifa,if(al.persona_idpersona,al.persona_idpersona,'0') as persona from programacion p  inner join cronograma cr on p.idprogramacion = cr.programacion_idprogramacion inner join cancha c on cr.cancha_idcancha=c.idcancha inner join local l on c.local_idlocal=l.idlocal left outer join alquiler al on cr.idcronograma=al.cronograma_idcronograma " +
			"where 	" +
			"l.idlocal=c.local_idlocal and	" +
			//"cp.cancha_idcancha=c.idcancha  and		" +
			//"a.Cronograma_idCronograma = cp.idcronograma and		" +
			"l.distrito like \"%"+dis+"%\" and		" +
			"p.fecha like \"%"+dia+"%\" and		" +
			"p.hora like \"%"+hora+"%\"	" +
			"order by		l.idlocal desc , c.idCancha desc , p.fecha desc, p.hora desc";
			

			System.out.println(query);
			
			stmt = con.prepareStatement(query);
//			stmt.setString(1, dis);
//			stmt.setString(2, dia);
//			stmt.setString(3, hora);
			rs = stmt.executeQuery();
			while (rs.next()) {
//				Cancha vo = new Cancha();
//				vo.setCodigo((rs.getInt("idcancha")));
//				vo.setCaracteristicas((rs.getString("caracteristicas")));
//				c.add(vo);
				ListadoCancha vo = new ListadoCancha();

				vo.getPersona().setCodigo(rs.getInt("persona"));
				vo.getCancha().setCaracteristicas(rs.getString("caracteristicas"));
				vo.getCronograma().setFecha(rs.getString("fecha"));
				vo.getCronograma().setHora( rs.getString("hora"));
				vo.getCronograma().setTarifa( rs.getDouble("tarifa"));
				vo.getLocal().setNombre( rs.getString("nombre"));
				vo.getLocal().setDistrito(rs.getString("distrito"));
				vo.getLocal().setDireccion(rs.getString("direccion"));
				c.add(vo);
				
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
//	
//	public Collection<ListadoCancha>  listar(String dis, String dia, String hora) throws DAOExcepcion {
//		System.out.println("CanchaDAO: listar()");
//		Collection<ListadoCancha> c = new ArrayList<ListadoCancha>();
//		
//		Connection con = null;
//		PreparedStatement stmt = null;
//		ResultSet rs = null;
//		try {
//			con = ConexionBD.obtenerConexion();
//			//String query = "" + //"select c.caracteristicas, l.nombre, l.direccion from local l, cancha c, Cronograma cp, programacion p where l.idlocal=c.local_idlocal and cp.cancha_idcancha=c.idcancha  and programacion_idprogramacion= p.idprogramacion and l.distrito like ? and p.hora=? and p.hora= ?";
//			String query = "select l.nombre, l.direccion, l.distrito, c.caracteristicas,  p.fecha, p.hora, p.tarifa,if(al.persona_idpersona,al.persona_idpersona,'0') as persona from programacion p  inner join cronograma cr on p.idprogramacion = cr.programacion_idprogramacion inner join cancha c on cr.cancha_idcancha=c.idcancha inner join local l on c.local_idlocal=l.idlocal left outer join alquiler al on cr.idcronograma=al.cronograma_idcronograma " +
//			"where 	" +
//			"l.idlocal=c.local_idlocal and	" +
//			//"cp.cancha_idcancha=c.idcancha  and		" +
//			//"a.Cronograma_idCronograma = cp.idcronograma and		" +
//			"l.distrito like \"%"+dis+"%\" and		" +
//			"p.fecha like \"%"+dia+"%\" and		" +
//			"p.hora like \"%"+hora+"%\"	" +
//			"order by		l.idlocal desc , c.idCancha desc , p.fecha desc, p.hora desc";
//			
//
//			System.out.println(query);
//			
//			stmt = con.prepareStatement(query);
////			stmt.setString(1, dis);
////			stmt.setString(2, dia);
////			stmt.setString(3, hora);
//			rs = stmt.executeQuery();
//			while (rs.next()) {
////				Cancha vo = new Cancha();
////				vo.setCodigo((rs.getInt("idcancha")));
////				vo.setCaracteristicas((rs.getString("caracteristicas")));
////				c.add(vo);
//				ListadoCancha vo = new ListadoCancha();
//
//				vo.getPersona().setCodigo(rs.getInt("persona"));
//				vo.getCancha().setCaracteristicas(rs.getString("caracteristicas"));
//				vo.getProgramacion().setFecha(rs.getString("fecha"));
//				vo.getProgramacion().setHora( rs.getString("hora"));
//				vo.getProgramacion().setTarifa( rs.getDouble("tarifa"));
//				vo.getLocal().setNombre( rs.getString("nombre"));
//				vo.getLocal().setDistrito(rs.getString("distrito"));
//				vo.getLocal().setDireccion(rs.getString("direccion"));
//				c.add(vo);
//				
//				
//			}
//		} catch (SQLException e) {
//			System.err.println(e.getMessage());
//			throw new DAOExcepcion(e.getMessage());
//		} finally {
//			this.cerrarStatement(stmt);
//			this.cerrarConexion(con);
//		}
//		return c;
//	}
//	
	
	public Collection<ListadoCancha>  listarCanchaLocal(Integer idUsuario) throws DAOExcepcion {
		System.out.println("CanchaDAO: listaCanchaLocal()");
		Collection<ListadoCancha> c = new ArrayList<ListadoCancha>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = 
				"select idcancha,nombre 	from local l  inner join cancha c on l.idlocal= c.local_idlocal where persona_idpersona = ? ";
			System.out.println(query);
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idUsuario);
			rs = stmt.executeQuery();

			while (rs.next()) {
				ListadoCancha vo = new ListadoCancha();
				vo.getCancha().setCodigo(rs.getInt("idcancha"));
				vo.getLocal().setNombre(rs.getString("nombre"));
				c.add(vo);
				
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

}